class MyError(ValueError):
    # 自定义异常类, 1. 第一步就是继承某个已有的异常类,因为所有异常类都在一棵继承树中
    # 2. 第二步就是添加自定义的属性和方法, 以便在捕获异常时可以使用(可选)
    pass


def foo(s):
    if s == '0':
        # raise的意思是抛出异常,就是产生一个异常对象,并且顺着调用者向上传递
        raise MyError('非法参数: %s' % s)
    return 10 / int(s)


try:
    foo('0')
except MyError as e:
    print('捕获到自定义异常:', e)
